using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._LocationReferencingTools._Configuration._LRSNetwork
{
    /// <summary>
    /// <para>Modify Network Calibration Rules</para>
    /// <para>Modifies the network calibration rules for an LRS Network.</para>
    /// <para>修改 LRS 网络的网络校准规则。</para>
    /// </summary>    
    [DisplayName("Modify Network Calibration Rules")]
    public class ModifyNetworkCalibrationRules : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public ModifyNetworkCalibrationRules()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_feature_class">
        /// <para>LRS Network Feature Class</para>
        /// <para>The input LRS Network feature class.</para>
        /// <para>输入 LRS 网络要素类。</para>
        /// </param>
        public ModifyNetworkCalibrationRules(object _in_feature_class)
        {
            this._in_feature_class = _in_feature_class;
        }
        public override string ToolboxName => "Location Referencing Tools";

        public override string ToolName => "Modify Network Calibration Rules";

        public override string CallName => "locref.ModifyNetworkCalibrationRules";

        public override List<string> AcceptEnvironments => ["workspace"];

        public override object[] ParameterInfo => [_in_feature_class, _calibration_rule.GetGPValue(), _calibration_offset, _out_feature_class];

        /// <summary>
        /// <para>LRS Network Feature Class</para>
        /// <para>The input LRS Network feature class.</para>
        /// <para>输入 LRS 网络要素类。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("LRS Network Feature Class")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_feature_class { get; set; }


        /// <summary>
        /// <para>Calibration Rule</para>
        /// <para><xdoc>
        ///   <para>Specifies the method that will be used to define calibration gap measures.</para>
        ///   <bulletList>
        ///     <bullet_item>As Is—The existing defined method in the network will be used while changing the calibration offset value.</bullet_item><para/>
        ///     <bullet_item>Adding Euclidean Distance—The Euclidean, or straight-line, distance will be calculated and added at each physical gap along an edited route.</bullet_item><para/>
        ///     <bullet_item>Stepping Increment—A value will be defined that will adjust, or step, at each physical gap in the route. This is the default.</bullet_item><para/>
        ///     <bullet_item>Adding Increment— A value will be defined and added to each measure of a route at each physical gap, in addition to the total length of the from and to measures of the route.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定将用于定义校准间隙测量的方法。</para>
        ///   <bulletList>
        ///     <bullet_item>按原样 - 更改校准偏移值时将使用网络中现有的定义方法。</bullet_item><para/>
        ///     <bullet_item>添加欧几里得距离 - 将计算欧几里得距离或直线距离，并将其相加沿编辑路径的每个物理间隙。</bullet_item><para/>
        ///     <bullet_item>步进增量—将定义一个值，该值将在路径中的每个物理间隙处进行调整或步进。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>添加增量 - 除了路径的从和到测量的总长度外，还将在每个物理间隙处定义一个值并将其添加到路径的每个测量值。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Calibration Rule")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _calibration_rule_value _calibration_rule { get; set; } = _calibration_rule_value._AS_IS;

        public enum _calibration_rule_value
        {
            /// <summary>
            /// <para>As Is</para>
            /// <para>As Is—The existing defined method in the network will be used while changing the calibration offset value.</para>
            /// <para>按原样 - 更改校准偏移值时将使用网络中现有的定义方法。</para>
            /// </summary>
            [Description("As Is")]
            [GPEnumValue("AS_IS")]
            _AS_IS,

            /// <summary>
            /// <para>Adding Euclidean Distance</para>
            /// <para>Adding Euclidean Distance—The Euclidean, or straight-line, distance will be calculated and added at each physical gap along an edited route.</para>
            /// <para>添加欧几里得距离 - 将计算欧几里得距离或直线距离，并将其相加沿编辑路径的每个物理间隙。</para>
            /// </summary>
            [Description("Adding Euclidean Distance")]
            [GPEnumValue("ADDING_EUCLIDEAN_DISTANCE")]
            _ADDING_EUCLIDEAN_DISTANCE,

            /// <summary>
            /// <para>Stepping Increment</para>
            /// <para>Stepping Increment—A value will be defined that will adjust, or step, at each physical gap in the route. This is the default.</para>
            /// <para>步进增量—将定义一个值，该值将在路径中的每个物理间隙处进行调整或步进。这是默认设置。</para>
            /// </summary>
            [Description("Stepping Increment")]
            [GPEnumValue("STEPPING_INCREMENT")]
            _STEPPING_INCREMENT,

            /// <summary>
            /// <para>Adding Increment</para>
            /// <para>Adding Increment— A value will be defined and added to each measure of a route at each physical gap, in addition to the total length of the from and to measures of the route.</para>
            /// <para>添加增量 - 除了路径的从和到测量的总长度外，还将在每个物理间隙处定义一个值并将其添加到路径的每个测量值。</para>
            /// </summary>
            [Description("Adding Increment")]
            [GPEnumValue("ADDING_INCREMENT")]
            _ADDING_INCREMENT,

        }

        /// <summary>
        /// <para>Calibration Offset</para>
        /// <para>The value of the Calibration Rule parameter's Adding Increment or Stepping Increment method. The increment value must be numeric and can include decimals.</para>
        /// <para>校准规则参数的“添加增量”或“步进增量”方法的值。增量值必须为数值，并且可以包含小数。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Calibration Offset")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public double? _calibration_offset { get; set; } = null;


        /// <summary>
        /// <para>Output Network Feature Class</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Network Feature Class")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _out_feature_class { get; set; }


        public ModifyNetworkCalibrationRules SetEnv(object workspace = null)
        {
            base.SetEnv(workspace: workspace);
            return this;
        }

    }

}